/**
 * @author maple on 2019/6/3 14:18.
 * @version v1.0
 * @see 1040441325@qq.com
 * 旋转数字
 * 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后，我们仍可以得到一个有效的，且和 X 不同的数。要求每位数字都要被旋转。
 * <p>
 * 如果一个数的每位数字被旋转以后仍然还是一个数字， 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己；2 和 5 可以互相旋转成对方；6 和 9 同理，除了这些以外其他的数字旋转以后都不再是有效的数字。
 * <p>
 * 现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数？
 * <p>
 * 示例:
 * 输入: 10
 * 输出: 4
 * 解释:
 * 在[1, 10]中有四个好数： 2, 5, 6, 9。
 * 注意 1 和 10 不是好数, 因为他们在旋转之后不变。
 */
public class RotateDigits {
    private static final int[] DIFF = new int[]{2, 5, 6, 9};
    private static final int[] SAME = new int[]{0, 1, 8};

    public static int rotatedDigits(int N) {
        int counter = 0;
        for (int i = 2; i <= N; i++) {
            int tmp = i;
            boolean isPer = false;
            while (tmp > 0) {
                if (contains(DIFF, tmp % 10)) {
                    isPer = true;
                } else if (contains(SAME, tmp % 10)) {

                } else {
                    isPer = false;
                    break;
                }
                tmp /= 10;
            }
            if (isPer) counter++;
        }
        return counter;
    }

    private static boolean contains(int[] s, int t) {
        for (int s1 : s) {
            if (s1 == t) return true;
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(rotatedDigits(10));
    }
}
